<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>类的基本知识</title>
</head>

<body>
    <script>
        // 创建一个Person类
        class Person {

            // 构造器方法
            constructor(name, age) {
                // 构造器中的this指的谁，——类的实例对象
                this.name = name;
                this.age = age;
            }
            // 一般方法
            speak() {
                console.log(`我叫${this.name}，我年龄${this.age}`);
            }
        }


        // 创建一个Student类，继承于Person类
    class Student extends Person{
        constructor(name,age,grade){
            super(name,age);   //共有的属性通过super来构造，super写在最前面
            this.grade = grade;
        }
        // 重写从父类继承过来的方法
        speak(){
            console.log(`我叫${this.name}，我年龄${this.age},我读的是${this.grade}`);
        }
        study(){
            // 通过Student实例调用study时，study中的this就是Student的实例
            console.log('我很努力的学习');
        }
    }

    class Car{
        constructor(name,price){
            this.name = name;
            this.price = price;
            this.wheel = 4;
        }

        // 类中可以直接写赋值语句,如下代码的含义是：给Car的实例对象添加一个属性，名为a,值为1；
        a=1;   //每个实例身上加一个属性
       static demo=100; //Car类本身加一个属性
        // run = function(){
        //     console.log(this);
        //     console.log('跑起来');
        // }
        run = ()=>{
            console.log(this);
            console.log('跑起来');
        }
    }

    const s1 = new Student('小张',15,'高一');
    console.log(s1);
    s1.speak();
    s1.study();



    const c1 = new Car('帕拉梅拉',199);
    const c2 = new Car('捷豹F-type',299);
    console.log(c1);
    console.log(c2);
    c1.run();
    c2.run();

    
    </script>
</body>

</html>